package MyArray;

import java.util.Arrays;

/**
 * 面试题 16.21. 交换和
 *
 * 给定两个整数数组，请交换一对数值（每个数组中取一个数值），使得两个数组所有元素的和相等。
 *
 * 返回一个数组，第一个元素是第一个数组中要交换的元素，第二个元素是第二个数组中要交换的元素。若有多个答案，返回任意一个均可。若无满足条件的数值，返回空数组。
 */

public class sum_swap_lcci {
    public static int[] findSwapValues(int[] array1, int[] array2) {
        int aSum = 0, bSum = 0;
        for (int a : array1) {
            aSum += a;
        }
        for (int b : array2) {
            bSum += b;
        }

        int goal = aSum - bSum;
        Arrays.sort(array1);
        Arrays.sort(array2);
        int i = 0, j = 0;
        while (i < array1.length && j < array2.length) {
            if ((array1[i] - array2[j]) * 2 == goal) {
//                System.out.println(array1[i]);
                return new int[]{array1[i], array2[j]};

            } else if ((array1[i] - array2[j]) * 2 > goal) {
                j++;
            } else {
                i++;
            }
        }

        return new int[]{};
    }

    public static void main(String[] args) {
        int[] array1 = new int[]{4, 1, 2, 1, 1, 2};
        int[] array2 = new int[]{3, 6, 3, 3};
//        System.out.println(findSwapValues(array1, array2));
    }


}
